{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!pip install --user graphviz" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Lab 12 - Decision Trees\n", "\n", "For this lab, we will use survey data collected by the city of [Somerville, MA](https://en.wikipedia.org/wiki/Somerville,_Massachusetts) asking residents about their happiness, as well as ratings of city services. \n", "\n", "The data is available from the UC Irvine Machine Learning Repository: [https://archive.ics.uci.edu/ml/datasets/Somerville+Happiness+Survey](https://archive.ics.uci.edu/ml/datasets/Somerville+Happiness+Survey)\n", "\n", "The link to download the data is [https://archive.ics.uci.edu/ml/machine-learning-databases/00479/SomervilleHappinessSurvey2015.csv](https://archive.ics.uci.edu/ml/machine-learning-databases/00479/SomervilleHappinessSurvey2015.csv)\n", "\n", "The data columns are:\n", "\n", "- D = decision attribute (D) with values 0 (unhappy) and 1 (happy) \n", "- X1 = the availability of information about the city services \n", "- X2 = the cost of housing \n", "- X3 = the overall quality of public schools \n", "- X4 = your trust in the local police \n", "- X5 = the maintenance of streets and sidewalks \n", "- X6 = the availability of social community events \n", "\n", "Attributes X1 to X6 have values 1 to 5." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from sklearn import tree\n", "import graphviz\n", "from graphviz import Source\n", " \n", "from sklearn.tree import export_graphviz\n", "import sklearn.metrics as met\n", "from sklearn.metrics import confusion_matrix\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read the data into a dataframe. We have given the columns more descriptive names." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
| \n", " | D | \n", "X1 | \n", "X2 | \n", "X3 | \n", "X4 | \n", "X5 | \n", "X6 | \n", "
|---|---|---|---|---|---|---|---|
| 0 | \n", "0 | \n", "3 | \n", "3 | \n", "3 | \n", "4 | \n", "2 | \n", "4 | \n", "
| 1 | \n", "0 | \n", "3 | \n", "2 | \n", "3 | \n", "5 | \n", "4 | \n", "3 | \n", "
| 2 | \n", "1 | \n", "5 | \n", "3 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
| 3 | \n", "0 | \n", "5 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
| 4 | \n", "0 | \n", "5 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
| 5 | \n", "1 | \n", "5 | \n", "5 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "
| 6 | \n", "0 | \n", "3 | \n", "1 | \n", "2 | \n", "2 | \n", "1 | \n", "3 | \n", "
| 7 | \n", "1 | \n", "5 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "5 | \n", "
| 8 | \n", "0 | \n", "4 | \n", "1 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
| 9 | \n", "0 | \n", "4 | \n", "4 | \n", "4 | \n", "2 | \n", "5 | \n", "5 | \n", "
| 10 | \n", "0 | \n", "3 | \n", "2 | \n", "3 | \n", "3 | \n", "2 | \n", "3 | \n", "
| 11 | \n", "0 | \n", "4 | \n", "4 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "
| 12 | \n", "1 | \n", "5 | \n", "2 | \n", "4 | \n", "5 | \n", "5 | \n", "5 | \n", "
| 13 | \n", "0 | \n", "4 | \n", "2 | \n", "4 | \n", "5 | \n", "4 | \n", "3 | \n", "
| 14 | \n", "0 | \n", "4 | \n", "1 | \n", "3 | \n", "3 | \n", "4 | \n", "3 | \n", "
| 15 | \n", "1 | \n", "3 | \n", "2 | \n", "4 | \n", "3 | \n", "4 | \n", "4 | \n", "
| 16 | \n", "0 | \n", "5 | \n", "3 | \n", "4 | \n", "5 | \n", "4 | \n", "5 | \n", "
| 17 | \n", "1 | \n", "5 | \n", "1 | \n", "4 | \n", "3 | \n", "4 | \n", "5 | \n", "
| 18 | \n", "0 | \n", "5 | \n", "1 | \n", "2 | \n", "4 | \n", "4 | \n", "5 | \n", "
| 19 | \n", "0 | \n", "4 | \n", "2 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
| 20 | \n", "1 | \n", "4 | \n", "2 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "
| 21 | \n", "1 | \n", "4 | \n", "2 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "
| 22 | \n", "0 | \n", "4 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "4 | \n", "
| 23 | \n", "0 | \n", "4 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "4 | \n", "
| 24 | \n", "1 | \n", "5 | \n", "1 | \n", "2 | \n", "5 | \n", "2 | \n", "4 | \n", "
| 25 | \n", "1 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "3 | \n", "4 | \n", "
| 26 | \n", "0 | \n", "3 | \n", "4 | \n", "3 | \n", "3 | \n", "2 | \n", "3 | \n", "
| 27 | \n", "1 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "
| 28 | \n", "1 | \n", "3 | \n", "3 | \n", "1 | \n", "3 | \n", "3 | \n", "4 | \n", "
| 29 | \n", "1 | \n", "3 | \n", "3 | \n", "1 | \n", "3 | \n", "3 | \n", "4 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 113 | \n", "1 | \n", "5 | \n", "3 | \n", "4 | \n", "3 | \n", "4 | \n", "3 | \n", "
| 114 | \n", "0 | \n", "5 | \n", "2 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
| 115 | \n", "1 | \n", "4 | \n", "3 | \n", "4 | \n", "4 | \n", "3 | \n", "4 | \n", "
| 116 | \n", "0 | \n", "3 | \n", "2 | \n", "2 | \n", "3 | \n", "3 | \n", "3 | \n", "
| 117 | \n", "0 | \n", "4 | \n", "1 | \n", "3 | \n", "5 | \n", "3 | \n", "5 | \n", "
| 118 | \n", "1 | \n", "5 | \n", "1 | \n", "4 | \n", "3 | \n", "5 | \n", "5 | \n", "
| 119 | \n", "0 | \n", "4 | \n", "1 | \n", "3 | \n", "2 | \n", "4 | \n", "4 | \n", "
| 120 | \n", "1 | \n", "5 | \n", "1 | \n", "5 | \n", "3 | \n", "5 | \n", "5 | \n", "
| 121 | \n", "0 | \n", "4 | \n", "2 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
| 122 | \n", "0 | \n", "5 | \n", "2 | \n", "4 | \n", "4 | \n", "5 | \n", "5 | \n", "
| 123 | \n", "1 | \n", "5 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
| 124 | \n", "1 | \n", "5 | \n", "2 | \n", "4 | \n", "4 | \n", "2 | \n", "3 | \n", "
| 125 | \n", "0 | \n", "5 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "
| 126 | \n", "0 | \n", "5 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "
| 127 | \n", "0 | \n", "3 | \n", "2 | \n", "3 | \n", "3 | \n", "5 | \n", "4 | \n", "
| 128 | \n", "0 | \n", "4 | \n", "1 | \n", "3 | \n", "3 | \n", "3 | \n", "4 | \n", "
| 129 | \n", "0 | \n", "5 | \n", "1 | \n", "4 | \n", "4 | \n", "4 | \n", "5 | \n", "
| 130 | \n", "0 | \n", "5 | \n", "2 | \n", "2 | \n", "4 | \n", "4 | \n", "5 | \n", "
| 131 | \n", "0 | \n", "5 | \n", "3 | \n", "5 | \n", "4 | \n", "5 | \n", "5 | \n", "
| 132 | \n", "1 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "1 | \n", "3 | \n", "
| 133 | \n", "1 | \n", "5 | \n", "1 | \n", "5 | \n", "5 | \n", "5 | \n", "5 | \n", "
| 134 | \n", "1 | \n", "4 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "
| 135 | \n", "1 | \n", "5 | \n", "5 | \n", "1 | \n", "1 | \n", "5 | \n", "1 | \n", "
| 136 | \n", "0 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "1 | \n", "3 | \n", "
| 137 | \n", "1 | \n", "5 | \n", "2 | \n", "3 | \n", "4 | \n", "4 | \n", "3 | \n", "
| 138 | \n", "0 | \n", "5 | \n", "3 | \n", "3 | \n", "1 | \n", "3 | \n", "5 | \n", "
| 139 | \n", "1 | \n", "5 | \n", "2 | \n", "3 | \n", "4 | \n", "2 | \n", "5 | \n", "
| 140 | \n", "1 | \n", "5 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "
| 141 | \n", "0 | \n", "4 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "
| 142 | \n", "0 | \n", "5 | \n", "3 | \n", "2 | \n", "5 | \n", "5 | \n", "5 | \n", "
143 rows × 7 columns
\n", "| \n", " | happy | \n", "city_info | \n", "housing_cost | \n", "school_quality | \n", "trust_police | \n", "streets_sidewalks | \n", "community_events | \n", "
|---|---|---|---|---|---|---|---|
| 0 | \n", "0 | \n", "3 | \n", "3 | \n", "3 | \n", "4 | \n", "2 | \n", "4 | \n", "
| 1 | \n", "0 | \n", "3 | \n", "2 | \n", "3 | \n", "5 | \n", "4 | \n", "3 | \n", "
| 2 | \n", "1 | \n", "5 | \n", "3 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
| 3 | \n", "0 | \n", "5 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
| 4 | \n", "0 | \n", "5 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
| \n", " | city_info | \n", "housing_cost | \n", "school_quality | \n", "trust_police | \n", "streets_sidewalks | \n", "community_events | \n", "
|---|---|---|---|---|---|---|
| 0 | \n", "3 | \n", "3 | \n", "3 | \n", "4 | \n", "2 | \n", "4 | \n", "
| 1 | \n", "3 | \n", "2 | \n", "3 | \n", "5 | \n", "4 | \n", "3 | \n", "
| 2 | \n", "5 | \n", "3 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
| 3 | \n", "5 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
| 4 | \n", "5 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
| 5 | \n", "5 | \n", "5 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "
| 6 | \n", "3 | \n", "1 | \n", "2 | \n", "2 | \n", "1 | \n", "3 | \n", "
| 7 | \n", "5 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "5 | \n", "
| 8 | \n", "4 | \n", "1 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
| 9 | \n", "4 | \n", "4 | \n", "4 | \n", "2 | \n", "5 | \n", "5 | \n", "
| 10 | \n", "3 | \n", "2 | \n", "3 | \n", "3 | \n", "2 | \n", "3 | \n", "
| 11 | \n", "4 | \n", "4 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "
| 12 | \n", "5 | \n", "2 | \n", "4 | \n", "5 | \n", "5 | \n", "5 | \n", "
| 13 | \n", "4 | \n", "2 | \n", "4 | \n", "5 | \n", "4 | \n", "3 | \n", "
| 14 | \n", "4 | \n", "1 | \n", "3 | \n", "3 | \n", "4 | \n", "3 | \n", "
| 15 | \n", "3 | \n", "2 | \n", "4 | \n", "3 | \n", "4 | \n", "4 | \n", "
| 16 | \n", "5 | \n", "3 | \n", "4 | \n", "5 | \n", "4 | \n", "5 | \n", "
| 17 | \n", "5 | \n", "1 | \n", "4 | \n", "3 | \n", "4 | \n", "5 | \n", "
| 18 | \n", "5 | \n", "1 | \n", "2 | \n", "4 | \n", "4 | \n", "5 | \n", "
| 19 | \n", "4 | \n", "2 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
| 20 | \n", "4 | \n", "2 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "
| 21 | \n", "4 | \n", "2 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "
| 22 | \n", "4 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "4 | \n", "
| 23 | \n", "4 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "4 | \n", "
| 24 | \n", "5 | \n", "1 | \n", "2 | \n", "5 | \n", "2 | \n", "4 | \n", "
| 25 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "3 | \n", "4 | \n", "
| 26 | \n", "3 | \n", "4 | \n", "3 | \n", "3 | \n", "2 | \n", "3 | \n", "
| 27 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "
| 28 | \n", "3 | \n", "3 | \n", "1 | \n", "3 | \n", "3 | \n", "4 | \n", "
| 29 | \n", "3 | \n", "3 | \n", "1 | \n", "3 | \n", "3 | \n", "4 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 113 | \n", "5 | \n", "3 | \n", "4 | \n", "3 | \n", "4 | \n", "3 | \n", "
| 114 | \n", "5 | \n", "2 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
| 115 | \n", "4 | \n", "3 | \n", "4 | \n", "4 | \n", "3 | \n", "4 | \n", "
| 116 | \n", "3 | \n", "2 | \n", "2 | \n", "3 | \n", "3 | \n", "3 | \n", "
| 117 | \n", "4 | \n", "1 | \n", "3 | \n", "5 | \n", "3 | \n", "5 | \n", "
| 118 | \n", "5 | \n", "1 | \n", "4 | \n", "3 | \n", "5 | \n", "5 | \n", "
| 119 | \n", "4 | \n", "1 | \n", "3 | \n", "2 | \n", "4 | \n", "4 | \n", "
| 120 | \n", "5 | \n", "1 | \n", "5 | \n", "3 | \n", "5 | \n", "5 | \n", "
| 121 | \n", "4 | \n", "2 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
| 122 | \n", "5 | \n", "2 | \n", "4 | \n", "4 | \n", "5 | \n", "5 | \n", "
| 123 | \n", "5 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
| 124 | \n", "5 | \n", "2 | \n", "4 | \n", "4 | \n", "2 | \n", "3 | \n", "
| 125 | \n", "5 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "
| 126 | \n", "5 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "
| 127 | \n", "3 | \n", "2 | \n", "3 | \n", "3 | \n", "5 | \n", "4 | \n", "
| 128 | \n", "4 | \n", "1 | \n", "3 | \n", "3 | \n", "3 | \n", "4 | \n", "
| 129 | \n", "5 | \n", "1 | \n", "4 | \n", "4 | \n", "4 | \n", "5 | \n", "
| 130 | \n", "5 | \n", "2 | \n", "2 | \n", "4 | \n", "4 | \n", "5 | \n", "
| 131 | \n", "5 | \n", "3 | \n", "5 | \n", "4 | \n", "5 | \n", "5 | \n", "
| 132 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "1 | \n", "3 | \n", "
| 133 | \n", "5 | \n", "1 | \n", "5 | \n", "5 | \n", "5 | \n", "5 | \n", "
| 134 | \n", "4 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "
| 135 | \n", "5 | \n", "5 | \n", "1 | \n", "1 | \n", "5 | \n", "1 | \n", "
| 136 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "1 | \n", "3 | \n", "
| 137 | \n", "5 | \n", "2 | \n", "3 | \n", "4 | \n", "4 | \n", "3 | \n", "
| 138 | \n", "5 | \n", "3 | \n", "3 | \n", "1 | \n", "3 | \n", "5 | \n", "
| 139 | \n", "5 | \n", "2 | \n", "3 | \n", "4 | \n", "2 | \n", "5 | \n", "
| 140 | \n", "5 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "
| 141 | \n", "4 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "
| 142 | \n", "5 | \n", "3 | \n", "2 | \n", "5 | \n", "5 | \n", "5 | \n", "
143 rows × 6 columns
\n", "